import random
import string
from django.core.cache import cache
from datetime import timedelta
from django.core.signing import Signer
from django.shortcuts import render
from .models import User,TestCase
from rest_framework.decorators import api_view
from rest_framework.parsers import JSONParser
from django.http import JsonResponse
from django.core.paginator import Paginator,EmptyPage,PageNotAnInteger
import logging
# Create your views here.


#添加
@api_view(['post'])
def zhuce(request):
    # 解析前段传过来json格式的数据
    data=JSONParser().parse(request)
    username=data['username']
    password=data['password']
    email=data['email']
    User(username=username,password=password,email=email).save()
    return JsonResponse({
        'code':200,
        'msg':'添加成功'
    })

# 产生token的方法
def createtoken(name):
    #产生一个8位的随机字符串
    randomstr=''.join(random.choices(string.ascii_letters,k=8))
    #生成token
    token=Signer().sign(randomstr+name)
    #把token设置到缓存中
    cache.set(f'test_{name}',token,timeout=timedelta(minutes=100).total_seconds())
    #返回token
    return token

# 检查token
def checktoken(request):
    #先获取header中的token
    reqtoken=request.META.get('HTTP_TOKEN')
    #检查前端有没有传来token
    if reqtoken is None:
        # 如果前端没有传token，返回False和自己定义的一个字符串
        return False,'XXXX'
    #反签名
    unsignttoken=Signer().unsign(reqtoken)
    logging.info(f'反签名后的内容是:{unsignttoken}')
    #取出用户名
    name=unsignttoken[8:]
    #从缓存中去获取token
    token=cache.get(f'test_{name}')
    #判断从缓存中获取token还存不存在
    if token is None:
        #如果缓存中不存在token
        return False,'XXXX'
    # 缓存中还存在token
    return True,name

# 登录
@api_view(['POST'])
def login(request):
    #先解析前端传来的数据
    data=JSONParser().parse(request)
    username=data.get('username')
    password=data.get('password')
    # 红色的username与model中的一样
    userobj=User.objects.get(username=username)
    # 如果这个条件成立，登录成功  userobj.password中的password与model中的一样
    if userobj.password==password:
        # 进入分支后产生token
        token=createtoken(username)
        return JsonResponse({
            'code':200,
            'msg':'登录成功',
            'token':token
        })
    return JsonResponse({
        'code': 400,
        'msg': "登录失败",

    })

#
# 日考8
@api_view(['POST'])
def addcase(request):
    flag,name=checktoken(request)
    if flag is False:
        return JsonResponse({
            'msg':'未登录状态，不可添加应用'
        },status=302)
    data=JSONParser().parse(request)
    casename=data.get('casename')
    priority=data.get('priority')
    review_status=data.get('review_status')
    TestCase(casename=casename,priority=priority,review_status=review_status).save()
    return JsonResponse({
        'msg': "添加成功",
    })











